home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Software of the Month Club / Amiga General Interest Volume 220 (1995)(SOMC)(Disk 2 of y)[SMCxxxC30Ix].zip / Amiga General Interest Volume 220 (1995)(SOMC)(Disk 2 of y)[SMCxxxC30Ix].adf / Typeface / Source / typeface.h < prev   
C/C++ Source or Header  |  1995-10-01  |  10KB  |  365 lines

  1. #include <stdarg.h>
  2. #include <string.h>
  3.  
  4. #include <clib/alib_protos.h>
  5. #include <clib/asl_protos.h>
  6. #include <clib/bgui_protos.h>
  7. #include <clib/diskfont_protos.h>
  8. #include <clib/dos_protos.h>
  9. #include <clib/exec_protos.h>
  10. #include <clib/graphics_protos.h>
  11. #include <clib/intuition_protos.h>
  12. #include <clib/iffparse_protos.h>
  13. #include <clib/utility_protos.h>
  14. #include <clib/textfield_protos.h>
  15.  
  16. #include <exec/exec.h>
  17. #include <gadgets/textfield.h>
  18. #include <graphics/gfxbase.h>
  19. #include <graphics/gfxmacros.h>
  20. #include <graphics/videocontrol.h>
  21. #include <intuition/icclass.h>
  22. #include <intuition/intuitionbase.h>
  23. #include <libraries/bgui_macros.h>
  24.  
  25. #include "locale.h"
  26.  
  27. #define MenuTitle(i)\
  28.   { NM_TITLE, NULL, NULL, 0, 0, (APTR)i }
  29.  
  30. #define PROJECT_MENU \
  31.   MenuTitle(ID_PROJECTMENU), \
  32.     Item(NULL,"O",ID_OPEN), \
  33.     Item(NULL,"S",ID_SAVE), \
  34.     Item(NULL,"D",ID_CHANGEDIR), \
  35.     Item(NULL,"I",ID_PREVIEW), \
  36.     ItemBar, \
  37.     Item(NULL,"P",ID_PREFS), \
  38.     Item(NULL,"?",ID_ABOUT), \
  39.     ItemBar, \
  40.     Item(NULL,"Q",ID_QUIT)
  41. #define FONT_MENU \
  42.   MenuTitle(ID_FONTMENU), \
  43.     Item(NULL,"E",ID_EDITFONT), \
  44.     ItemBar, \
  45.     Item(NULL,NULL,ID_MOVEFL), \
  46.     Item(NULL,NULL,ID_MOVEFR), \
  47.     Item(NULL,NULL,ID_MOVEFU), \
  48.     Item(NULL,NULL,ID_MOVEFD), \
  49.     ItemBar, \
  50.     Item(NULL,"R",ID_RESETKERN)
  51. #define CHARACTER_MENU \
  52.   MenuTitle(ID_CHARMENU), \
  53.     Item(NULL,"C",ID_COPY), \
  54.     Item(NULL,"V",ID_PASTE), \
  55.     ItemBar, \
  56.     Item(NULL,NULL,ID_MOVEL), \
  57.     Item(NULL,NULL,ID_MOVER), \
  58.     Item(NULL,NULL,ID_MOVEU), \
  59.     Item(NULL,NULL,ID_MOVED), \
  60.     ItemBar, \
  61.     Item(NULL,NULL,ID_ZOOMIN), \
  62.     Item(NULL,NULL,ID_ZOOMOUT), \
  63.     ItemBar, \
  64.     Item(NULL,"W",ID_WIDTHC), \
  65.     Item(NULL,"K",ID_KERNING)
  66. #define PREVIEW_MENU \
  67.   MenuTitle(ID_PREVIEWMENU), \
  68.     Item(NULL,"T",ID_UPDATE), \
  69.     Item(NULL,"H",ID_ALL), \
  70.     Item(NULL,"L",ID_CLEAR)
  71.  
  72. #define NAME "Typeface"
  73. #define VERSION "1.1"
  74. #define CURRENT_PREFS 2
  75.  
  76. #define MAX(a,b) (((a) > (b)) ? (a) : (b))
  77. #define MIN(a,b) (((a) < (b)) ? (a) : (b))
  78.  
  79. struct Character
  80. {
  81.   UWORD chr_Width,chr_Height;
  82.   UBYTE *chr_Data;
  83. };
  84.  
  85. struct Preferences
  86. {
  87.   UWORD Version;
  88.   ULONG Flags, ScrModeID, ScrDepth;
  89.   ULONG VecHeight, PixelX, PixelY;
  90.   ULONG SaveTo;
  91.   UBYTE ScrFontName[MAXFONTNAME];
  92.   UWORD ScrFontHeight;
  93.   UBYTE ThisPubName[MAXPUBSCREENNAME], DefPubName[MAXPUBSCREENNAME];
  94.   UWORD ToolBar;
  95.   UBYTE CharSize,CharWidth;
  96.   UWORD CharHeight;
  97.   UBYTE FixedFontName[MAXFONTNAME];
  98.   UWORD FixedFontHeight;
  99. };
  100.  
  101. #define PREFS_CUSTOMSCREEN    (1<<0)
  102. #define PREFS_PIXELBORDER    (1<<1)
  103. #define PREFS_PIXELGRID        (1<<2)
  104. #define PREFS_MAXWINDOW        (1<<3)
  105. #define PREFS_CONFIRMQUIT    (1<<4)
  106. #define PREFS_SHOWBASELINE    (1<<5)
  107. #define PREFS_AUTOTBARHEIGHT    (1<<6)
  108. #define PREFS_INVERTSHIFT    (1<<7)
  109.  
  110. #define TBAR_WIDTHL        0
  111. #define FTBAR_WIDTHL        (1<<(TBAR_WIDTHL))
  112. #define TBAR_WIDTHR        1
  113. #define FTBAR_WIDTHR        (1<<(TBAR_WIDTHR))
  114. #define TBAR_MOVEL        2
  115. #define FTBAR_MOVEL        (1<<(TBAR_MOVEL))
  116. #define TBAR_MOVER        3
  117. #define FTBAR_MOVER        (1<<(TBAR_MOVER))
  118. #define TBAR_MOVEU        4
  119. #define FTBAR_MOVEU        (1<<(TBAR_MOVEU))
  120. #define TBAR_MOVED        5
  121. #define FTBAR_MOVED        (1<<(TBAR_MOVED))
  122. #define TBAR_KERN        6
  123. #define FTBAR_KERN        (1<<(TBAR_KERN))
  124. #define TBAR_WIDTH        7
  125. #define FTBAR_WIDTH        (1<<(TBAR_WIDTH))
  126. #define TBAR_ZOOMIN        8
  127. #define FTBAR_ZOOMIN        (1<<(TBAR_ZOOMIN))
  128. #define TBAR_ZOOMOUT        9
  129. #define FTBAR_ZOOMOUT        (1<<(TBAR_ZOOMOUT))
  130. #define MAX_TBAR        10
  131. #define DEFAULT_TBAR \
  132.   FTBAR_WIDTHL|FTBAR_WIDTHR|FTBAR_MOVEL| \
  133.   FTBAR_MOVER|FTBAR_MOVEU|FTBAR_MOVED|FTBAR_KERN
  134.  
  135. /* typeface.c */
  136.  
  137. enum id { ID_OPEN = 1,        ID_SAVE,        ID_CHANGEDIR,
  138.       ID_EDITFONT,        ID_PREFS,        ID_ABOUT,
  139.       ID_QUIT,        ID_CHARS,        ID_CHARSCROLL,
  140.       ID_EDIT,        ID_WIDTHL,        ID_WIDTHR,
  141.       ID_WIDTHC,        ID_MOVEL,        ID_MOVER,
  142.       ID_MOVEU,        ID_MOVED,        ID_KERNING,
  143.       ID_COPY,        ID_PASTE,        ID_ACCEPT,
  144.       ID_CANCEL,        ID_PROPORTIONAL,    ID_HEIGHT,
  145.       ID_WIDTH,        ID_BASELINE,        ID_SMEAR,
  146.       ID_NORMAL,        ID_BOLD,        ID_ITALIC,
  147.       ID_ULINE,        ID_EXTEND,        ID_REVERSE,
  148.       ID_ASPECT,        ID_VECHEIGHT,        ID_PIXELWIDTH,
  149.       ID_PIXELHEIGHT,    ID_PIXELBORDER,        ID_ASSIGNSTR,
  150.       ID_ASSIGNPATH,    ID_ASSIGN,        ID_ASSIGNADD,
  151.       ID_CHARWIDTH,        ID_WIDTHPOS,        ID_SPACE,
  152.       ID_KERN,        ID_CUSTOM,        ID_CHOOSEMODE,
  153.       ID_CHOOSEFONT,    ID_SAVETO,        ID_USE,
  154.       ID_FONTNAME,        ID_GETSAVEDIR,        ID_FIRST,
  155.       ID_LAST,        ID_KERNTABLE,        ID_SAVEDIR,
  156.       ID_BLANK,        ID_PUBNAME,        ID_RESETKERN,
  157.       ID_MOVEFL,        ID_MOVEFR,        ID_MOVEFU,
  158.       ID_MOVEFD,        ID_CHARSIZE,        ID_CHARWIDE,
  159.       ID_CHARHIGH,        ID_CHOOSEFIXFONT,    ID_MAXWIN,
  160.       ID_CONFIRMQUIT,    ID_SHOWBASELINE,    ID_AUTOHEIGHT,
  161.       ID_INVERTSHIFT,    ID_PREVIEW,        ID_ALL,
  162.       ID_PREVIEWSTR,    ID_CLEAR,        ID_UPDATE,
  163.       ID_PREVIEWSCROLL,    ID_ZOOMIN,        ID_ZOOMOUT,
  164.       ID_PROJECTMENU,    ID_FONTMENU,        ID_CHARMENU,
  165.       ID_PREVIEWMENU };
  166.  
  167. enum scroll { GADG_HORIZ,
  168.           GADG_VERT,
  169.           GADG_LEFT,
  170.           GADG_RIGHT,
  171.           GADG_UP,
  172.           GADG_DOWN,
  173.           GADG_NONE };
  174.  
  175. #define GETBIT(buffer,offset) \
  176.   ((((*((UBYTE *)(buffer)+((offset)>>3)))&(128>>((offset)&7))) != 0) \
  177.   ? 1 : 0)
  178.  
  179. struct charDef
  180. {
  181.   WORD charOffset,charBitWidth;
  182. };
  183.  
  184. void Setup(void);
  185. void SetupScreen(void);
  186. __geta4 void WindowHook(__a0 struct Hook *hook, __a2 Object *o,
  187.   __a1 struct IntuiMessage *msg);
  188. void OpenFontWnd(void);
  189. void CloseFontWnd(void);
  190. void Quit(void);
  191. void QuitScreen(void);
  192. void MsgLoop(void);
  193. ULONG CheckObjMsg(struct Window *wnd, Object *obj);
  194. void CheckOpenCharWin(ULONG pressed, ULONG shift);
  195. void SharedMsgs(ULONG code,struct CharNode *node);
  196. void Error(char *message);
  197. LONG ShowReq(char *text,char *gadgets,...);
  198. void ClrDisposeObject(Object **obj);
  199. void ClrWindowClose(Object **obj,struct Window **wnd);
  200. void SleepWindows(void);
  201. void WakeWindows(void);
  202. void LoadFont(struct TextAttr *font);
  203. BOOL UnpackChar(struct Character *chr,struct TextFont *font,ULONG i);
  204. void KernTables(ULONG to, ULONG from);
  205. void ClearCurrentFont(void);
  206. void OpenEditFontWnd(void);
  207. void CloseEditFontWnd(BOOL obj);
  208. void OpenPrefsWnd(void);
  209. void ClosePrefsWnd(BOOL obj);
  210. void OpenAssignWnd(void);
  211. void CloseAssignWnd(BOOL obj);
  212. void OpenWidthWnd(struct CharNode *node);
  213. void CloseWidthWnd(BOOL obj);
  214. void OpenKernWnd(struct CharNode *node);
  215. void CloseKernWnd(BOOL obj);
  216. void OpenSaveWnd(void);
  217. void CloseSaveWnd(BOOL obj);
  218. void OpenAboutWnd(void);
  219. void PutPositive(struct Window *wnd,char *name,LONG value,LONG min,
  220.   LONG *dest);
  221. void NewHeights(void);
  222. void NewWidths(void);
  223. void ChangeCharWidth(struct Character *chr, ULONG width, ULONG newoffset,
  224.   ULONG oldoffset);
  225. void CheckWidthKern(struct Character *chr);
  226. void SavePrefs(char *filename);
  227. void LoadPrefs(void);
  228. void CopyChar(struct CharNode *node);
  229. void PasteChar(struct CharNode *node);
  230. void FlushAllFonts(void);
  231. void GetScreenRatio(struct Screen *scr);
  232. void WriteFont(char *buffer, char *name, UWORD height);
  233. char *GetPubName(BOOL screen);
  234. void CopyPubName(void);
  235. void WarnVisitors(void);
  236. LONG SizeX(LONG x);
  237. LONG SizeY(LONG y);
  238. void ResetKerning(void);
  239. void CheckQuit(void);
  240.  
  241. /* char.c */
  242.  
  243. #define DATA(i,j) *(chr->chr_Data+((j)*chr->chr_Width)+(i))
  244.  
  245. struct CharNode
  246. {
  247.   struct Node chln_Node;
  248.   Object *chln_Object;
  249.   struct Window *chln_Window;
  250.   char *chln_Title;
  251.   Object *chln_HorizGadg, *chln_VertGadg;
  252.   Object *chln_LeftGadg, *chln_RightGadg;
  253.   Object *chln_UpGadg, *chln_DownGadg;
  254.   struct Hook *chln_Hook;
  255.   Object *chln_EditGadg;
  256.   struct Character *chln_Character;
  257.   ULONG chln_Number;
  258.   ULONG chln_MinPixelX, chln_MinPixelY;
  259.   ULONG chln_CurPixelX, chln_CurPixelY;
  260.   ULONG chln_ToolBarWidth, chln_ToolBarHeight;
  261. };
  262.  
  263. struct CharNode *OpenCharWin(ULONG charnum,struct IBox size);
  264. void CloseCharWin(struct CharNode *node);
  265. Object *CreateSysImage(ULONG which,struct DrawInfo *dri);
  266. Object *CreatePropGadg(ULONG freedom,Tag tag1,...);
  267. Object *CreateButtonGadg(Object *image,Tag tag1,...);
  268. __geta4 void CharHook(__a0 struct Hook *hook, __a2 Object *o,
  269.   __a1 struct IntuiMessage *msg);
  270. void ForceResizeChar(struct CharNode *node);
  271. void SetScrollers(struct CharNode *node);
  272. void RedrawEdit(struct CharNode *node);
  273. void MoveLeft(struct CharNode *node,struct Character *chr);
  274. void MoveRight(struct CharNode *node,struct Character *chr);
  275. void MoveUp(struct CharNode *node,struct Character *chr);
  276. void MoveDown(struct CharNode *node,struct Character *chr);
  277. void MoveAll(void (*MoveFunction)());
  278. void RedrawAll(void);
  279. void ZoomIn(struct CharNode *node);
  280. void ZoomOut(struct CharNode *node);
  281. void SetMinWindowSize(struct CharNode *node, ULONG oldx);
  282.  
  283. /* preview.c */
  284.  
  285. void OpenPreviewWnd(void);
  286. void ClosePreviewWnd(BOOL all);
  287. void SetPreviewFont();
  288. void PreviewMsgs(ULONG code);
  289. void SetPreviewScroller();
  290. void PreviewAll(void);
  291. UBYTE *SaveFont(BOOL tables,BOOL preview);
  292. ULONG SaveShowReq(char *text,char *gadgets,...);
  293. void WriteCharData(struct charDef *cd, UBYTE *fontdataptr, ULONG dest,
  294.   ULONG src, ULONG *off, ULONG mod);
  295.  
  296. /* text.c */
  297.  
  298. void SetLabelKey(Object *win, Object *gadg, APTR text);
  299. void SetupMenus(struct NewMenu *menus);
  300.  
  301. /* node.c */
  302.  
  303. struct List *GetNewList(struct List **list);
  304. struct Node *CreateNode(ULONG size,struct List *list);
  305. void RemoveList(struct List **list,BOOL all,(*hook)());
  306.  
  307. /* gadget.c */
  308.  
  309. #define CG_TAGBASE    (TAG_USER+1000)
  310. #define CG_Pos        (CG_TAGBASE+0)
  311. #define CG_Pressed    (CG_TAGBASE+1)
  312. #define CG_SizeX    (CG_TAGBASE+2)
  313. #define CG_SizeY    (CG_TAGBASE+3)
  314. #define CG_Redraw    (CG_TAGBASE+4)
  315. #define CG_Font        (CG_TAGBASE+5)
  316. #define CG_ShiftDown    (CG_TAGBASE+6)
  317.  
  318. Class *InitCharGadgClass(void);
  319. BOOL FreeCharGadgClass(Class *cl);
  320. ULONG GetCharGadgWidth(UWORD width,struct TextFont *font);
  321. ULONG GetCharGadgHeight(UWORD height,struct TextFont *font);
  322.  
  323. #define EG_XOFFSET 4
  324. #define EG_YOFFSET 2
  325.  
  326. #define EG_TAGBASE    (TAG_USER+1000)
  327. #define EG_PixelX    (EG_TAGBASE+1)
  328. #define EG_PixelY    (EG_TAGBASE+2)
  329. #define EG_CharStruct    (EG_TAGBASE+3)
  330. #define EG_Update    (EG_TAGBASE+4)
  331. #define EG_Width    (EG_TAGBASE+5)
  332. #define EG_Height    (EG_TAGBASE+6)
  333. #define EG_XOffset    (EG_TAGBASE+7)
  334. #define EG_YOffset    (EG_TAGBASE+8)
  335. #define EG_CharNode    (EG_TAGBASE+9)
  336. #define EG_PixelBorder    (EG_TAGBASE+10)
  337. #define EG_ShowBaseline    (EG_TAGBASE+11)
  338. #define EG_Baseline    (EG_TAGBASE+12)
  339. #define EG_ChangePtr    (EG_TAGBASE+13)
  340.  
  341. Class *InitEditGadgClass(void);
  342. BOOL FreeEditGadgClass(Class *cl);
  343.  
  344. #define SCRL_TAGBASE    (TAG_USER+1000)
  345. #define SCRL_Right    (SCRL_TAGBASE+1)
  346.  
  347. Class *InitSlideGadgClass(void);
  348. BOOL FreeSlideGadgClass(Class *cl);
  349.  
  350. /* error.c */
  351.  
  352. enum errors { ASLALLOC,
  353.           CREATEPORT,
  354.           LOCKSCREEN,
  355.           OPENSCREEN,
  356.           ALLOCVEC,
  357.           NEWWINDOW,
  358.           NEWFILE,
  359.           OPENWINDOW,
  360.           NEWPROP,
  361.           NEWBUTTON };
  362.  
  363. void ErrorCode(ULONG code);
  364. char *ErrorText(ULONG code);
  365.